fn main() {
    let s = gives_ownership();  // s进入作用域

    takes_ownership(s); // s的值移动到函数里
                        // ... 所以到这里不再有效

    let x = 5;          // x进入作用域

    makes_copy(x);      // x应该移动函数里，
                        // 但是i32是copy的，
                        // 所以在后面可以继续使用x
} // 这里，x先移出了作用域，然后是s。因为s的值已被移走，
  // 没有特殊之处

fn takes_ownership(some_string: String) {  // some_string进入作用域
    println!("{}", some_string);
}   // 这里，some_string移出作用域并调用'drop'方法,
    // 占用的内存被释放

fn makes_copy(some_integer: i32) {  // some_integer进入作用域
    println!("{}", some_integer);
}   // 这里，some_integer移出作用域，没有特殊之处

fn gives_ownership() -> String {
    let some_string = String::from("hello");    // some_string进入作用域

    some_string // 返回some_string，并移出给调用的函数
}
